////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2017-2018 Qualcomm Technologies, Inc.
// All Rights Reserved.
// Confidential and Proprietary - Qualcomm Technologies, Inc.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// THIS IS AUTO-GENERATED CODE.  PLEASE DO NOT EDIT (File bug reports against tools).
///
/// Auto-generated by: ParameterParser V1.1.4
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @file  afpdlibelements.cpp
/// @brief Auto-generated Chromatix parameter file
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#include "afpdlibelements.h"
#include "parametersetmanager.h"

AFPDLIBELEMENTS_NAMESPACE_BEGIN

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Default Constructor
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
chromatixPDLibTypeClass::chromatixPDLibTypeClass(
    const CHAR* name)
    : ParameterModule(name, MAJOR, MINOR, PATCH, 0, 0, 0, 0)
{
    PARAMETER_INITIALIZE(SymbolTableID);
    PARAMETER_INITIALIZE(module_version);
    PARAMETER_INITIALIZE(parameter_version);
    PARAMETER_INITIALIZE(preProcess);
    PARAMETER_INITIALIZE(correlation);
    PARAMETER_INITIALIZE(postProcess);
    PARAMETER_INITIALIZE(adaptiveK);
    PARAMETER_INITIALIZE(enablePeripheralWindows);
    PARAMETER_INITIALIZE(singleWindowProcessingLevel);
    PARAMETER_INITIALIZE(gridProcessingLevel);
    PARAMETER_INITIALIZE(PeripheralProcessing);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Constructor
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
chromatixPDLibTypeClass::chromatixPDLibTypeClass(
    const CHAR* name,
    UINT32 modeId,
    UINT16 mode,
    UINT16 subMode,
    UINT32 group)
    : ParameterModule(name, MAJOR, MINOR, PATCH, modeId, mode, subMode, group)
{
    PARAMETER_INITIALIZE(SymbolTableID);
    PARAMETER_INITIALIZE(module_version);
    PARAMETER_INITIALIZE(parameter_version);
    PARAMETER_INITIALIZE(preProcess);
    PARAMETER_INITIALIZE(correlation);
    PARAMETER_INITIALIZE(postProcess);
    PARAMETER_INITIALIZE(adaptiveK);
    PARAMETER_INITIALIZE(enablePeripheralWindows);
    PARAMETER_INITIALIZE(singleWindowProcessingLevel);
    PARAMETER_INITIALIZE(gridProcessingLevel);
    PARAMETER_INITIALIZE(PeripheralProcessing);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Destructor
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
chromatixPDLibTypeClass::~chromatixPDLibTypeClass()
{
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// GetName
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
const CHAR* chromatixPDLibTypeClass::GetName(
    const CHAR* type)
{
    const CHAR* name = type;
    CHAR temp[ParameterFileSymbolTableEntry::TYPE_LEN + 1];
    if (PARAMETER_STRCMP(type, ParameterFileSymbolTableEntry::GetType(temp, "chromatixPDLib")) == 0)
    {
        name = "chromatixPDLib";
    }
    return name;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixTuningProcessLevel
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixPDLibTypeClass::LoadchromatixTuningProcessLevel(
    ParameterFileSymbolTableEntry* entry,
    chromatixTuningProcessLevel* structure)
{
    BOOL result = TRUE;
    structure->processingMode = (chromatixPDProcessingMode)entry->ReadEnum(&result);
    result = result && entry->ReadInt32(&structure->dynamicLevel);

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixTuningAdaptiveK
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixPDLibTypeClass::LoadchromatixTuningAdaptiveK(
    ParameterFileSymbolTableEntry* entry,
    chromatixTuningAdaptiveK* structure)
{
    BOOL result = TRUE;
    result = result && entry->ReadInt32(&structure->enable);
    result = result && entry->ReadInt32(&structure->timeoutFrameCntThres);
    result = result && entry->ReadInt32(&structure->filterSize);
    result = result && entry->ReadInt32(&structure->state0StableCntThres);
    result = result && entry->ReadInt32(&structure->state1StableCntThres);
    result = result && entry->ReadInt32(&structure->minimumLensPosDelta);
    result = result && entry->ReadInt32(&structure->state0ConfThres);
    result = result && entry->ReadInt32(&structure->state1ConfThres);
    result = result && entry->ReadFloat(&structure->state0PhaseDiffThres);
    result = result && entry->ReadFloat(&structure->state1PhaseDiffThres);
    result = result && entry->ReadFloat(&structure->tolNearTargetUpperBound);
    result = result && entry->ReadFloat(&structure->tolNearTargetLowerBound);
    result = result && entry->ReadFloat(&structure->tolFarTargetUpperBound);
    result = result && entry->ReadFloat(&structure->tolFarTargetLowerBound);

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixTuningPostProcess
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixPDLibTypeClass::LoadchromatixTuningPostProcess(
    ParameterFileSymbolTableEntry* entry,
    chromatixTuningPostProcess* structure)
{
    BOOL result = TRUE;
    result = result && entry->ReadFloat(&structure->biasVectorStrength);
    result = result && entry->ReadFloat(&structure->temporalFilterStaticWeight);
    result = result && entry->ReadFloat(&structure->temporalFilterDynamicWeight);
    result = result && entry->ReadInt32(&structure->enableGridOverlap);
    result = result && entry->ReadInt32(&structure->confIntegralWidth);

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixPDRange
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixPDLibTypeClass::LoadchromatixPDRange(
    ParameterFileSymbolTableEntry* entry,
    chromatixPDRange* structure)
{
    BOOL result = TRUE;
    result = result && entry->ReadInt32(&structure->from);
    result = result && entry->ReadInt32(&structure->to);

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixTuningCorrelation
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixPDLibTypeClass::LoadchromatixTuningCorrelation(
    ParameterFileSymbolTableEntry* entry,
    chromatixTuningCorrelation* structure)
{
    BOOL result = TRUE;
    result = result && entry->ReadFloat(&structure->minimumConfidenceLevel);
    result = result && entry->ReadFloat(&structure->defocusConfidenceThreshold);
    result = result && entry->ReadFloat(&structure->PDRangeControl);
    result = result && LoadchromatixPDRange(entry, &structure->searchRange);
    result = result && LoadchromatixPDRange(entry, &structure->lcrSearchRange);

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixPDLIBPreprocessingFilterSettings
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixPDLibTypeClass::LoadchromatixPDLIBPreprocessingFilterSettings(
    ParameterFileSymbolTableEntry* entry,
    chromatixPDLIBPreprocessingFilterSettings* structure)
{
    BOOL result = TRUE;
    result = result && afglobalelements::afglobalelementsClass::Loadtrigger_pt_type_aec(entry, &structure->AECTrigger);
    result = result && entry->ReadInt32(&structure->verticalMode);
    result = result && entry->ReadInt32(&structure->horizontalMode);
    result = result && entry->ReadInt32(&structure->boxFilterLength);
    result = result && entry->ReadInt32(&structure->antiAliasFilterThreshold);

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixLCRFilterTrigger
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixPDLibTypeClass::LoadchromatixLCRFilterTrigger(
    ParameterFileSymbolTableEntry* entry,
    chromatixLCRFilterTrigger* structure)
{
    BOOL result = TRUE;
    for (UINT32 i = 0; result && i < 3; i++)
    {
        result = result && LoadchromatixPDLIBPreprocessingFilterSettings(entry, &structure->filterSet[i]);
    }

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixDPDFilterTrigger
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixPDLibTypeClass::LoadchromatixDPDFilterTrigger(
    ParameterFileSymbolTableEntry* entry,
    chromatixDPDFilterTrigger* structure)
{
    BOOL result = TRUE;
    for (UINT32 i = 0; result && i < 3; i++)
    {
        result = result && LoadchromatixPDLIBPreprocessingFilterSettings(entry, &structure->filterSet[i]);
    }

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixTuningHDRCfg
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixPDLibTypeClass::LoadchromatixTuningHDRCfg(
    ParameterFileSymbolTableEntry* entry,
    chromatixTuningHDRCfg* structure)
{
    BOOL result = TRUE;
    structure->channelSelection = (chromatixHDRChannelSelection)entry->ReadEnum(&result);
    result = result && entry->ReadInt32(&structure->longThreshold);

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixTuningPreProcess
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixPDLibTypeClass::LoadchromatixTuningPreProcess(
    ParameterFileSymbolTableEntry* entry,
    chromatixTuningPreProcess* structure)
{
    BOOL result = TRUE;
    structure->sparseProcessingMode = (chromatixSparsePDProcMode)entry->ReadEnum(&result);
    result = result && LoadchromatixTuningHDRCfg(entry, &structure->HDR);
    result = result && entry->ReadInt32(&structure->boxFilterLength);
    result = result && entry->ReadInt32(&structure->antiAliasFilterThreshold);
    result = result && LoadchromatixDPDFilterTrigger(entry, &structure->filterTrigger);
    result = result && LoadchromatixLCRFilterTrigger(entry, &structure->lcrFilterTrigger);
    structure->lcrBinningMode = (chromatixLCRBinningMode)entry->ReadEnum(&result);
    structure->lcrRawType = (chromatixLCRRawType)entry->ReadEnum(&result);
    result = result && entry->ReadInt32(&structure->lcrMaxBinningNum);

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixPDLibType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixPDLibTypeClass::LoadchromatixPDLibType(
    ParameterFileSymbolTableEntry* entry,
    chromatixPDLibType* structure)
{
    BOOL result = TRUE;
    result = result && Loadmodule_versionStruct(entry, &structure->module_version);
    result = result && Loadparameter_versionStruct(entry, &structure->parameter_version);
    result = result && LoadchromatixTuningPreProcess(entry, &structure->preProcess);
    result = result && LoadchromatixTuningCorrelation(entry, &structure->correlation);
    result = result && LoadchromatixTuningPostProcess(entry, &structure->postProcess);
    result = result && LoadchromatixTuningAdaptiveK(entry, &structure->adaptiveK);
    result = result && entry->ReadInt32(&structure->enablePeripheralWindows);
    result = result && LoadchromatixTuningProcessLevel(entry, &structure->singleWindowProcessingLevel);
    result = result && LoadchromatixTuningProcessLevel(entry, &structure->gridProcessingLevel);
    result = result && LoadchromatixTuningProcessLevel(entry, &structure->PeripheralProcessing);

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load module_versionStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixPDLibTypeClass::Loadmodule_versionStruct(
    ParameterFileSymbolTableEntry* entry,
    chromatixPDLibType::module_versionStruct* structure)
{
    BOOL result = TRUE;
    result = result && entry->ReadInt32(&structure->major_revision);
    result = result && entry->ReadInt32(&structure->minor_revision);

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load parameter_versionStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixPDLibTypeClass::Loadparameter_versionStruct(
    ParameterFileSymbolTableEntry* entry,
    chromatixPDLibType::parameter_versionStruct* structure)
{
    BOOL result = TRUE;
    result = result && entry->ReadInt32(&structure->major_revision);
    result = result && entry->ReadInt32(&structure->minor_revision);

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Parse symbol table entry, and return a new object
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
ParameterModule* chromatixPDLibTypeClass::Parse(
    ParameterSetManager* manager,
    ParameterFileSymbolTableEntry* entry) const
{
    chromatixPDLibTypeClass* cls = NULL;

    if (PARAMETER_STRCMP(Type, entry->Type) == 0 && Major == entry->Major &&
        Minor == entry->Minor && Patch == entry->Patch)
    {
        cls = PARAMETER_NEW chromatixPDLibTypeClass(GetName(entry->Type), 
            entry->ModeId, entry->Mode, entry->SubMode, entry->Group);
        if (cls != NULL)
        {
            BOOL result = TRUE;

            cls->SymbolTableID = entry->ID;
            cls->ID            = entry->ID;

            result = result && LoadchromatixPDLibType(entry, cls);

            if (!result)
            {
                PARAMETER_DELETE cls;
                cls = NULL;
            }
        }
    }
    return (ParameterModule*)cls;
}


AFPDLIBELEMENTS_NAMESPACE_END
